home *** CD-ROM | disk | FTP | other *** search
/ MIDICraft's MIDINET CD-ROM / MIDICraft's MIDINET CD-ROM.iso / DOSUTILS / KORGI3 / KORG.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-24  |  3.1 KB  |  123 lines

  1. #include "korg.hpp"
  2. #include <string.h>
  3.  
  4. static char* korgid = "KORG";
  5.  
  6. int pcgheader(FILE*f, PCGHEAD &pcghead)
  7. {
  8.   if (!f)
  9.     return 0;
  10.   fseek(f, 0L,SEEK_SET);
  11.   if (fread(&pcghead, 1, sizeof(PCGHEAD), f) != sizeof(PCGHEAD) || strncmp(pcghead.korg, korgid, strlen(korgid)) != 0)
  12.     return 0;
  13.   return 1;
  14. }
  15.  
  16. int styheader(FILE* f, STYHEAD & styhead)
  17. {
  18.   if (!f)
  19.     return 0;
  20.   fseek(f, 0L,SEEK_SET);
  21.   if (fread(&styhead, 1, sizeof(STYHEAD), f) != sizeof(STYHEAD) || strncmp(styhead.korg, korgid, strlen(korgid)) != 0)
  22.     return 0;
  23.   return 1;
  24. }
  25.  
  26. int read_korgname(FILE* f, char* s)
  27. {
  28.   if (fread(s, KORGNAME_SIZE, 1, f) != 1)
  29.     return 0;
  30.   s[KORGNAME_SIZE] = '\0';
  31.   return 1;
  32. }
  33.  
  34.  
  35. int arrheader(FILE* f, ARRHEAD & arrhead)
  36. {
  37.   if (!f)
  38.     return 0;
  39.   fseek(f, 0L,SEEK_SET);
  40.   if (fread(&arrhead, 1, sizeof(ARRHEAD), f) != sizeof(ARRHEAD) || strncmp(arrhead.korg, korgid, strlen(korgid)) != 0)
  41.     return 0;
  42.   return 1;
  43. }
  44.  
  45. int bsqheader(FILE* f, BSQHEAD & bsqhead)
  46. {
  47.   if (!f)
  48.     return 0;
  49.   fseek(f, 0L,SEEK_SET);
  50.   if (fread(&bsqhead, 1, sizeof(BSQHEAD), f) != sizeof(BSQHEAD) || strncmp(bsqhead.korg, korgid, strlen(korgid)) != 0)
  51.     return 0;
  52.   return 1;
  53. }
  54.  
  55. int sngheader(FILE* f, SNGHEAD & snghead)
  56. {
  57.   if (!f)
  58.     return 0;
  59.   fseek(f, 0L,SEEK_SET);
  60.   if (fread(&snghead, 1, sizeof(SNGHEAD), f) != sizeof(SNGHEAD) || strncmp(snghead.korg, korgid, strlen(korgid)) != 0)
  61.     return 0;
  62.   return 1;
  63. }
  64.  
  65. void sngdefheader(SNGHEAD & head)
  66. {
  67.   strncpy(head.korg, korgid, sizeof(head.korg));
  68.   memset(&head.unknown, 0, sizeof(head.unknown));
  69.   head.unknown[0] = '9';
  70.   head.unknown[2] = 1;
  71. }
  72.  
  73. void sngdefcontrol(SNGCTRL& ctrl)
  74. {
  75. int i;
  76.  
  77.   memset(&ctrl, 0, sizeof(ctrl));
  78.   for (i = 0; i < 16; i++)
  79.   {
  80.     ctrl.channel[i] = i;
  81.     ctrl.status[i].syncsrc = 3; // INT
  82.     ctrl.status[i].mute = 0; // PLAY
  83.     ctrl.bendrange[i] = 13;
  84.   }
  85.   ctrl.beat = 0x13; // 4/4
  86.   ctrl.tempo = 90;
  87.   ctrl.nextsong = 0x7F + 0x80; // OFF, autostart ON
  88.   strncpy(ctrl.songtitle, "New Song  ", sizeof(ctrl.songtitle));
  89.   memcpy(&ctrl.effects, "\x01\x13\x64\x64\x64\x64\x44\x44\x3f\x12\x00\x1f\x3c\x3e\x00\xff\xfd\x00\x00\x63\x0a\x03\x00\x04\x04\x00\x00", sizeof(ctrl.effects));
  90.   for (i = 0; i < 16; i++)
  91.   {
  92.     ctrl.trackctrl[i].prog = i+1;
  93.     ctrl.trackctrl[i].outlevel = 127;
  94.     ctrl.trackctrl[i].pan = 15; // CNT
  95.     ctrl.trackctrl[i].sendlevel = 0x22; // C=2 D=2
  96.     ctrl.trackctrl[i].key_wintop = 127;
  97.     ctrl.trackctrl[i].key_winbottom = 0;
  98.     ctrl.trackctrl[i].vel_wintop = 127;
  99.     ctrl.trackctrl[i].vel_winbottom = 1;
  100.     ctrl.trackctrl[i].ctrlfilter = 0x8F; //all ctrl changes
  101.     ctrl.trackctrl[i].channel = i+1;
  102.   }
  103.   ctrl.metron_level = 99;
  104.   ctrl.metron_pan = 1; // L14
  105.   ctrl.metron_leadin = 2;
  106. }
  107.  
  108. void sngdefpatctrl(PATCTRL & pat)
  109. {
  110.   pat.beat = 0x13; // 1/4
  111.   pat.len = 1;
  112. }
  113.  
  114. void sngdefsong(SNG & sng)
  115. {
  116. unsigned* adrtab;
  117.   for (int i = 0; i < 10; i++)
  118.    sngdefcontrol(sng.sngctrl[i]);
  119.   for (i = 0; i < 100; i++)
  120.     sngdefpatctrl(sng.patctrl[i]);
  121.   for (adrtab = (unsigned*)&sng.adr, i = 0; i <= 270; i++)
  122.     *adrtab++ = 0x123c;
  123. }